package com.hu.green.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.hu.green.commen.R;
import com.hu.green.entity.User;
import com.hu.green.service.UserService;
import com.hu.green.utils.SetUserNameUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/user")
@CrossOrigin(value = "*")
@Slf4j
public class UserController {
    @Autowired
    UserService userService;

    /**
     * 登录
     * @param user
     * @return
     */
    @PostMapping("/login")
    public R<User> login(@RequestBody User user){
        // 1. 获取用户名和密码
        String password = user.getPassword(); // 获取传输过来的密码
        // 2. 初步判断是否正确输入
        if (user.getAccount() == null) return R.error("账号为空");
        if (user.getPassword() == null) return R.error("密码为空");
        // 3. 在数据库中查找--根据用户名查找
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(User::getAccount, user.getAccount()); //查找条件
        User user1 = userService.getOne(queryWrapper); //从数据库中得到信息
        // 4. 如果未查找到则注册账号
        if( user1 == null ){
            user.setName(SetUserNameUtils.getStringRandom()); // 设置初始用户名
            userService.save(user); // 保存数据到数据库
            log.info("登录成功"); // 打印日志
            LambdaQueryWrapper<User> queryWrapper1 = new LambdaQueryWrapper<>();
            queryWrapper1.eq(User::getAccount, user.getAccount()); //查找条件
            User user2 = userService.getOne(queryWrapper1); //从数据库中得到信息
            return R.success(user2);
        }
        // 5. 进一步判断密码是否正确
        if( !user1.getPassword().equals(password) ){
            return R.error("密码错误");
        }
        // 6. 返回信息，打印日志
        log.info("登录成功");
        return R.success(user1);
    }

    /**
     * 更新用户信息
     * @param user
     * @return
     */
    @PostMapping("/update")
    public R<User> update(@RequestBody User user){
        // 1. 查找用户信息
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(User::getAccount, user.getAccount()); //查找条件
        User user1 = userService.getOne(queryWrapper); //从数据库中得到信息
        // 2. 更改信息--后期需要改进，因为有长度限制，超出限制应返回错误信息
        if(user.getName()!=null) user1.setName(user.getName());
        if(user.getImg()!=null) user1.setImg(user.getImg());
        if(user.getGender()!=null) user1.setGender(user.getGender());
        if(user.getPersonalized()!=null) user1.setPersonalized(user.getPersonalized());
        if(user.getPassword()!=null) user1.setPassword(user.getPassword());
        // 3. 更新信息
        userService.update(user1,queryWrapper);
        return R.success(user1);
    }

    /**
     * 获取用户信息
     * @param account
     * @return
     */
    @GetMapping("/get")
    public User getUserMessage(String account){

        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(User::getAccount, account); //查找条件
        User user = userService.getOne(queryWrapper); //从数据库中得到信息
        if (user == null) return null;
        return user;
    }


    /**
     * 退出
     * @return
     */
    @GetMapping("/logout")
    public R<String> logout(){
        log.info("已退出账户");
        return R.success("已退出");
    }


}
